// Core Controller
// (c) jimon game studio

#ifndef JEH_JECORECONTROLLER
#define JEH_JECORECONTROLLER

#include "Config_Engine.h"
#include "IApplication.h"
#include "IPerspective.h"

namespace je
{
	namespace core
	{
		//! Init Engine
		JE_ENGINE_FUNCTION_API void JE_ENGINE_FUNCTION_CALL InitEngine();

		//! DeInit Engine
		JE_ENGINE_FUNCTION_API void JE_ENGINE_FUNCTION_CALL DeInitEngine();

		//! Engine Tick
		JE_ENGINE_FUNCTION_API void JE_ENGINE_FUNCTION_CALL EngineTick();

		//! Stop Engine
		JE_ENGINE_FUNCTION_API void JE_ENGINE_FUNCTION_CALL StopEngine();

		//! Run Engine
		JE_ENGINE_FUNCTION_API void JE_ENGINE_FUNCTION_CALL RunEngine(app::IApplication * App);

		//! Register Perspective
		JE_ENGINE_FUNCTION_API void JE_ENGINE_FUNCTION_CALL RegisterPerspective(app::IPerspective * Perspective);

		//! UnRegister Perspective
		JE_ENGINE_FUNCTION_API void JE_ENGINE_FUNCTION_CALL UnRegisterPerspective(app::IPerspective * Perspective);

		//! UnRegister All Perspectives
		JE_ENGINE_FUNCTION_API void JE_ENGINE_FUNCTION_CALL UnRegisterAllPerspectives();

		//! Set Up Perspective
		JE_ENGINE_FUNCTION_API void JE_ENGINE_FUNCTION_CALL SetUpPerspective(app::IPerspective * Perspective);

		//! Set Down Perspective
		JE_ENGINE_FUNCTION_API void JE_ENGINE_FUNCTION_CALL SetDownPerspective(app::IPerspective * Perspective);
	}
}

#endif
